package oop;

/**
 * Lớp Bot (quái) kế thừa từ Entity
 */
public class Bot extends Entity {

    int turn = 0, yy = 0, t = 0;

    public Bot(int x, int y, String path) {
        super(x, y, path);
    }

    /**
     * hàm auto tất cả:
     *
     * @ ngoài tầm rangeSee: đi tuần
     * @ trong tầm rangeSee: gọi hàm findPlayer
     * @ trong tầm đánh: đánh nhân vật
     */
    public void auto() {
        effect.checkCollison(other);
        // Tầm không thấy
        double khoangcach = Math.sqrt((x - other.x) * (x - other.x) + (y - other.y) * (y - other.y));

        if (khoangcach <= range * 2) {
            // tầm tìm other
            turn = (++turn) % 2; // nhằm giảm tốc
            if (turn == 0) {
                findPlayer();
            } else {
                // Player đã chết
                if (!other.isActive()) {
                    return;
                }

                // tấn công
                if (khoangcach <= range) {
                    attack(other);
                }
            }
        } else {
            yy = (++t) % 100;
            autoGoto(yy);
            if (x == 0) {
                this.changeDirection(Bot.DIRECTION_RIGHT);
            }
            if (y == 0) {
                this.changeDirection(Bot.DIRECTION_DOWN);
            }
            if (y == 480) {
                this.changeDirection(Bot.DIRECTION_UP);
            }
            if (x == 860) {
                this.changeDirection(Bot.DIRECTION_LEFT);
            }

            this.refresh();
        }

    }

    /**
     * tìm người chơi
     */
    private void findPlayer() {
        if (y > other.y) {
            changeDirection(Bot.DIRECTION_UP);
        }
        if (y < other.y) {
            changeDirection(Bot.DIRECTION_DOWN);
        }
        if (y == other.y) {
            if (x > other.x) {
                changeDirection(Bot.DIRECTION_LEFT);
            } else if (x < other.x) {
                changeDirection(Bot.DIRECTION_RIGHT);
            }
        }
        // Giữ khoảng cách với other
        if (x > other.x - 50 && x < other.x + 50 && y > other.y - 50 && y < other.y + 50) {
            return;
        }
        refresh();
    }

    /**
     * Đi tuần
     *
     * @param a
     */
    private void autoGoto(int a) {
        if (a == 20) {
            changeDirection(Bot.DIRECTION_DOWN);
        }
        if (a == 35) {
            changeDirection(Bot.DIRECTION_LEFT);
        }
        if (a == 99) {
            changeDirection(Bot.DIRECTION_RIGHT);
        }
        if (a == 66) {
            changeDirection(Bot.DIRECTION_UP);
        }
    }

}
